import * as LTT from 'list-to-tree';
interface treeConfig {
  key_id?: string;
  key_parent?: string;
  key_child?: string;
}
const defaultConfig: treeConfig = {
  key_id: 'id',
  key_parent: 'pid',
  key_child: 'children',
};

/**
 * 菜单列表生成树状结构
 * @param list 菜单列表
 * @param config 生成配置
 * @returns 生成的树状结构菜单
 */
export function listToTree<T>(
  list: any[],
  config: treeConfig | undefined = undefined,
): T[] {
  config =
    config == undefined ? defaultConfig : Object.assign(defaultConfig, config);
  const ltt = new LTT(list, config);
  return ltt.GetTree();
}

/**
 * 根据用户权限过滤菜单列表
 * @param roles 用户权限
 * @param list 菜单列表
 */
export function menuFilter(roles: string[], list: any[]) {
  list.forEach((item, index) => {
    if (item.roles) {
      const menuRoleArr = item.roles.indexOf(',')
        ? item.roles.split(',')
        : [item.roles];
      if (menuRoleArr.some((role) => roles.includes(role)) == false) {
        list.splice(index, 1);
      }
    }
  });
  // const _list = list.filter((item) => {
  //   if (item.roles) {
  //     const menuRoleArr = item.roles.indexOf(',')
  //       ? item.roles.split(',')
  //       : [item.roles];
  //     return menuRoleArr.some((role) => roles.includes(role));
  //   }
  //   return true;
  // });
  // list = _list;
}
/**
 * 菜单格式化
 * @param list 需要格式化的菜单
 */
export function menuFormat(list: any[]) {
  list.forEach((item, index) => {
    list[index] = (({ id, pid, name, path, component, ...arg }) => ({
      id,
      pid,
      name,
      path,
      component,
      meta: arg,
    }))(item);
  });
}
